/******************************************************************************* * Copyright (c) 2005, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.menus; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.jface.action.ContributionManager; import org.eclipse.ui.services.IServiceWithSources; /** * <p> * Provides services related to the menu architecture within the workbench. It * can be used to contribute additional items to the menu, tool bar and status * line. * </p> * <p> * This service can be acquired from your service locator: * <pre> * IMenuService service = (IMenuService) getSite().getService(IMenuService.class); * </pre> * <ul> * <li>This service is available globally.</li> * </ul> * </p> * * @noimplement This interface is not intended to be implemented by clients. * @noextend This interface is not intended to be extended by clients. * * @since 1.0 */ public interface IMenuService extends IServiceWithSources { /** * Contribute and initialize the contribution factory. This should only be * called once per factory. After the call, the factory should be treated as * an unmodifiable object. * <p> * <b>Note:</b> factories should be removed when no longer necessary. If * not, they will be removed when the IServiceLocator used to acquire this * service is disposed. * </p> * * @param factory * the contribution factory. Must not be <code>null</code> * @see #removeContributionFactory(AbstractContributionFactory) */ public void addContributionFactory(AbstractContributionFactory factory); /** * Remove the contributed factory from the menu service. If the factory is * not contained by this service, this call does nothing. * * @param factory * the contribution factory to remove. Must not be * <code>null</code>. */ public void removeContributionFactory(AbstractContributionFactory factory); /** * Populate a <code>ContributionManager</code> at the specified starting * location with a set of <code>IContributionItems</code>s. It applies * <code>AbstractContributionFactory</code>s that are stored against the * provided location. * * @param mgr * The ContributionManager to populate * @param location * The starting location to begin populating this contribution * manager. The format is the Menu API URI format. * @see #releaseContributions(ContributionManager) */ public void populateContributionManager(ContributionManager mgr, String location); /** * Before calling dispose() on a ContributionManager populated by the menu * service, you must inform the menu service to release its contributions. * This takes care of unregistering any IContributionItems that have their * visibleWhen clause managed by this menu service. * <p> * This will not update the ContributionManager (and any widgets). It will * simply remove all menu service references to the contents of this * ContributionManager. * </p> * * @param mgr * The manager that was populated by a call to * {@link #populateContributionManager(ContributionManager, String)} */ public void releaseContributions(ContributionManager mgr); /** * Get the current state of eclipse as seen by the menu service. * * @return an IEvaluationContext containing state variables. * * @see org.eclipse.ui.ISources * @see org.eclipse.ui.services.IEvaluationService */ public IEvaluationContext getCurrentState(); }